package main

import (
	"fmt"
	oop6 "gitee.com/stevenchin/gostudy/6oop"
)

func main() {

	var rootNode = oop6.TreeNode{}
	fmt.Println(rootNode)
	rootNode.Value = 0

	rootNode.LeftNode = &oop6.TreeNode{1, nil, nil}
	rootNode.RightNode = oop6.Constructor(3)

	rootNode.LeftNode.LeftNode = new(oop6.TreeNode)
	oop6.SetValue(rootNode.LeftNode.LeftNode, 5)

	rootNode.RightNode.LeftNode = new(oop6.TreeNode)
	rootNode.RightNode.LeftNode.InitValue(7)
	rootNode.RightNode.RightNode = new(oop6.TreeNode)
	rootNode.RightNode.RightNode.InitValue(8)

	// 中序遍历节点
	rootNode.Reverse()
	fmt.Println()
	// 后序遍历节点
	rootNode.PostOrder()
	fmt.Println()
	// 前序遍历节点
	rootNode.PreOrderFunc(func(node *oop6.TreeNode) {
		node.Print()
	})
	fmt.Println()
	// 前序遍历并计算节点个数
	sumCount := 0
	rootNode.PreOrderFunc(func(node *oop6.TreeNode) {
		node.Print()
		sumCount++
	})
	fmt.Println()
	fmt.Println("sumCount：", sumCount)

	channel := rootNode.PreOrderFuncChannel()

	for value := range channel {
		fmt.Print(value, " ")
	}
}
